home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / nrpas13.zip / AMOEBA.DEM < prev    next >
Text File  |  1991-04-29  |  1KB  |  60 lines

  1. PROGRAM d10r5(input,output);
  2. (* driver for routine AMOEBA *)
  3. CONST
  4.    np=3;
  5.    mp=4;
  6.    ftol=1.0e-6;
  7. TYPE
  8.    glmpnp = ARRAY [1..mp,1..np] OF real;
  9.    glmp = ARRAY [1..mp] OF real;
  10.    glnp = ARRAY [1..np] OF real;
  11. VAR
  12.    i,iter,j,ndim : integer;
  13.    x : glnp;
  14.    y : glmp;
  15.    p : glmpnp;
  16.  
  17. (*$I MODFILE.PAS *)
  18. (*$I BESSJ0.PAS *)
  19.  
  20. FUNCTION func(x: glnp): real;
  21. (* calling function must define type
  22. TYPE
  23.    glnp = ARRAY [1..np] OF real;
  24. where np is the physical dimension of the argument x. *)
  25. BEGIN
  26.    func := 0.6-bessj0(sqr(x[1]-0.5)+sqr(x[2]-0.6)+sqr(x[3]-0.7))
  27. END;
  28.  
  29. (*$I AMOEBA.PAS *)
  30.  
  31. BEGIN
  32.    p[1,1] := 0.0; p[1,2] := 0.0; p[1,3] := 0.0;
  33.    p[2,1] := 1.0; p[2,2] := 0.0; p[2,3] := 0.0;
  34.    p[3,1] := 0.0; p[3,2] := 1.0; p[3,3] := 0.0;
  35.    p[4,1] := 0.0; p[4,2] := 0.0; p[4,3] := 1.0;
  36.    ndim := np;
  37.    FOR i := 1 to mp DO BEGIN
  38.       FOR j := 1 to np DO BEGIN
  39.          x[j] := p[i,j]
  40.       END;
  41.       y[i] := func(x)
  42.    END;
  43.    amoeba(p,y,ndim,ftol,iter);
  44.    writeln;
  45.    writeln('Iterations: ',iter:3);
  46.    writeln('Vertices of final 3-d simplex and');
  47.    writeln('function values at the vertices:');
  48.    writeln;
  49.    writeln('i':3,
  50.       'x[i]':10,'y[i]':12,'z[i]':12,'function':14);
  51.    writeln;
  52.    FOR i := 1 to mp DO BEGIN
  53.       write(i:3);
  54.       FOR j := 1 to np DO write(p[i,j]:12:6);
  55.       writeln(y[i]:12:6)
  56.    END;
  57.    writeln;
  58.    writeln('True minimum is at (0.5,0.6,0.7)')
  59. END.
  60.